package edu.poly.game.player;

import edu.poly.game.battleship.BattleShip;
import edu.poly.game.stats.GameStats;
import edu.poly.game.util.Coordinate;

public interface Player {
	
	/**
	 * player type, computer or human
	 * @return
	 */
	PlayerType getPlayerType();
	
	/**
	 * return status whether this player is automatic or manual
	 * @return
	 */
	boolean isAutomatic();
	
	/**
	 * player can take a missile hit, return true if hit something
	 * return false if miss or ship at that location already destroyed
	 * @param coordinate
	 */
	MissileFireResult receiveMissileHit(final Coordinate coordinate);
	
	/**
	 * adds a battle ship onto this player's board
	 * @param battleShip
	 * @return
	 */
	boolean addBattleShip(final BattleShip battleShip);
	
	/**
	 * returns this player's current state of the game board
	 * @return
	 */
	char[][] getGameBoard();
	
	void processResult(final MissileFireResult result);
	
	GameStats getGameStats();
	
	boolean hasMoreShips();
}
